<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>

    class Person{

        // 属性:constructor函数是系统提供的，用来盛放成员属性的，此函数不是手动调用的，而是由系统自动调用，当我们去实例化对象的时候，constructor这个构造函数会自动被调用
        constructor(name,age,sex){
            this.name=name
            this.age=age
            this.sex=sex
        }


        // 方法
        say(){
            console.log(`我是${this.name}`);
        }



        // 静态属性声明：static 属性=值
        static type="人"

        // 静态的方法声明：static 方法名(){}
        static eat(){
            console.log(`每天要吃早饭`);
        }
    }


    // 实例化：
    let xiaoming=new Person("小明",10,"男")
    console.log(xiaoming);// {name: '小明', age: 10, sex: '男', type: '人'}


    // 静态的属性和方法又叫做类的属性和方法，所以由类去调用
    console.log(Person.type);//人
    Person.eat()//每天要吃早饭



    let xiaoyue=new Person("小月",11,"女")
    console.log(xiaoyue);//{name: '小月', age: 11, sex: '女', type: '人'}




    // 每实例化一个对象，这个对象都会拥有一份属于自己的属性和方法
    // 而type属性是大家公有的（属性名和属性值一样的） 这种属性没有必要每创建一个对象就创建一个type，因为每创建一个属性都是占有内存空间

    // 为了创建公用的属性和方法，class提供了静态，我们在创建类的时候，公有的属性和方法统一使用静态去声明

    // 私有的属性和方法被称为成员属性和方法（或者对象的属性和方法）
    // 公有的属性和方法被称为静态属性和方法（或者类的属性和方法）

    // 成员和静态的区别？
    // 成员属性和方法是私有的，由实例化的对象来调用，new实例化的时候，每一个属性和方法都会创建一份专属于这个对象的
    // 静态的属性和方法是公有的，由类来调用，只有一份












</script>